package physgin;

/**
 * Describes the structure of a world, including 
 * the generic types accepted by its methods.
 */
abstract class World<B extends Background, A extends Body, C> 
    {    
        /**
         * Adds a Body to the world.
         *
         * @param  a   Body to add to the world.
         * @see        Body
         */
        abstract void addBody(A a);    
        
        /**
         * Removes a Body from the world.
         *
         * @param  a   Body to remove from the world.
         * @see        Body
         */
        abstract void removeBody(A a);
        
        /**
         * Sets the background of the world.
         *
         * @param  a   Background to add to the world.
         * @see        Background
         */
        abstract void setBackground(B b);
        
        /**
         * Returns a viewable canvas of the world.
         *
         * @return      Object of the canvas to view the world.
         */
        abstract C getCanvas(); 
    }